#!/usr/bin/env python
# -*- coding: UTF8 	-*-

from GladeConnect import GladeConnect
import gtk
import sys
import dialogos
import debugwindow
import SimpleTree
import ifd
from strSQL.basicas import strSelectCuartel
from psycopg2 import connect
import completion
import comunes
import treetohtml

(CODIGO,
 DESCRIPCION,
 SECTOR,
 CODIGO_SECTOR,
 CODIGO_VARIEDAD,
 DESCRIPCION_VARIEDAD) = range(6)

class wnCuartel (GladeConnect):
    def __init__(self, conexion=None, padre=None, root="wnCuartel"):
        GladeConnect.__init__(self, "glade/wnCuartel.glade", root)
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.padre = padre
        if padre is None :
            self.wnCuartel.maximize()
            self.frm_padre = self.wnCuartel
        else:
            self.frm_padre = self.padre.frm_padre
        self.crea_columnas()
        self.carga_datos()
        
        
    def crea_columnas(self):
        columnas = []
        columnas.append ([CODIGO, "Código","str"])
        columnas.append ([DESCRIPCION, "Descripción", "str"])
        columnas.append ([SECTOR, "Séctor", "str"])
        columnas.append ([DESCRIPCION_VARIEDAD, "Variedad", "str"])
        
        self.modelo = gtk.ListStore(*(4*[str]))
        SimpleTree.GenColsByModel(self.modelo, columnas, self.treeCuartel)
        self.col_data = [x[0] for x in columnas]
        
    def on_btnImprimir_clicked(self, btn=None):
        t = treetohtml.TreeToHTML(self.treeCuartel,"Cuartel", self.col_data)
        t.show()
        
    def carga_datos(self):
        self.modelo = ifd.ListStoreFromSQL(self.cnx, strSelectCuartel)
        self.treeCuartel.set_model(self.modelo)

    def on_btnAnadir_clicked(self, btn=None, data=None):
        dlg = dlgCuartel(self.cnx, self.frm_padre, False)
        dlg.editando = False
        response=dlg.dlgCuartel.run()
        if response == gtk.RESPONSE_OK:
            self.carga_datos()
    
    def on_btnQuitar_clicked(self, btn=None):
        model, it = self.treeCuartel.get_selection().get_selected()
        if model is None or it is None:
            return
        descripcion = model.get_value(it, DESCRIPCION)
        codigo = model.get_value(it, CODIGO)
        
        if dialogos.yesno("¿Desea eliminar el Cuartel <b>%s</b>?\nEsta acción no se puede deshacer"%descripcion, self.frm_padre)==gtk.RESPONSE_YES:
            llaves={'codigo_cuartel':codigo}
            sql=ifd.deleteFromDict('traza.cuartel', llaves)
            try:
                self.cursor.execute(sql, llaves)
                model.remove(it)
            except:
                print sys.exc_info()[1]
                dialogos.error("<b>NO SE PUEDE ELIMINAR</b>\nEl cuartel <b>%s</b>, se encuentra relacionado con un sector."%descripcion)
                
        
    def on_btnPropiedades_clicked(self, btn=None):

        model, it = self.treeCuartel.get_selection().get_selected()
        if model is None or it is None:
            return
        dlg=dlgCuartel(self.cnx, self.frm_padre, False)
        dlg.entCodigo.set_text(model.get_value(it, CODIGO))
        dlg.entDescripcion.set_text(model.get_value(it, DESCRIPCION))
        dlg.codigo_sector = dlg.pecSector.select(model.get_value(it, SECTOR),1)
        dlg.codigo_variedad = dlg.pecVariedad.select(model.get_value(it, DESCRIPCION_VARIEDAD),1)
        
        dlg.editando = True
        response = dlg.dlgCuartel.run()
        if response == gtk.RESPONSE_OK:
            self.modelo.clear()
            self.carga_datos()
            
    def on_btnCerrar_clicked(self, btn=None):
        if self.padre is None:
            self.on_exit()
        else:
            self.padre.remove_tab("Cuartel")
            
    def on_treeCuartel_row_activated(self, tree=None, path=None, col=None):
        self.on_btnPropiedades_clicked()


class dlgCuartel(GladeConnect):
    def __init__(self, conexion=None, padre=None, editando=None):
        GladeConnect.__init__(self, "glade/wnCuartel.glade", "dlgCuartel")
        self.cnx = conexion
        self.cursor = self.cnx.cursor()
        self.entDescripcion.grab_focus()
        self.dlgCuartel.show()
        self.editando = editando
        self.codigo_sector = None
        self.codigo_variedad = None
        self.pecSector = completion.CompletionSector(self.entSector,
                self.sel_sector,
                self.cnx)
        self.pecVariedad = completion.CompletionVariedad(self.entVariedad,
                self.sel_variedad,
                self.cnx)
        
    def sel_sector(self, completion, model, iter):
        self.codigo_sector = model.get_value(iter, 1)
        
    def sel_variedad(self, completion, model, it):
        self.codigo_variedad = model.get_value(it, 1)
        
    def on_btnAceptar_clicked(self, btn=None, date=None, cnx=None):
        
        if self.entDescripcion.get_text() == "":
            dialogos.error("El campo <b>Descripcion de Cuartel</b> no puede estar vacío.")
            return
        
        if self.codigo_sector is None:
            dialogos.error("El campo <b>Sector</b> no puede estar vacío.")
            return
        
        if self.codigo_variedad is None:
            dialogos.error("El campo <b>Variedad</b> no puede estar vacío.")
            return
        
        campos = {}
        llaves = {}
        campos['codigo_sector']  = self.codigo_sector
        campos['codigo_variedad']  = self.codigo_variedad
        campos['descripcion_cuartel']  = self.entDescripcion.get_text().upper()
        
        if not self.editando:
            sql = ifd.insertFromDict("traza.cuartel", campos)
            
        else:
            llaves['codigo_cuartel'] = self.entCodigo.get_text()
            sql, campos=ifd.updateFromDict("traza.cuartel", campos, llaves)
            
        self.cursor.execute(sql, campos)
        self.dlgCuartel.hide()
        
    def on_btnCancelar_clicked(self, btn=None):
        self.dlgCuartel.hide()
        
if __name__ == '__main__':
    cnx = connect("dbname='traza'")
    #cnx.autocommit()
    sys.excepthook = debugwindow.show
    d = wnCuartel(cnx)
    
    gtk.main()
